package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.doc.api.document.rep.AgentContactBaseDto;
import com.cmc.cloud.cmclink.doc.api.document.req.AgentContactReqDto;
import com.cmc.cloud.cmclink.doc.entity.AgentContactDO;
import com.cmc.cloud.cmclink.doc.vo.*;
import com.cmes.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 航线进出口联系人信息 Service 接口
 *
 * @author 招商轮船-管理员
 */
public interface AgentContactService {

    /**
     * 创建航线进出口联系人信息
     *
     * @param createReqVO 创建信息
     */
    void createAgentContact(@Valid AgentContactCreateReqVO createReqVO);

    /**
     * 更新航线进出口联系人信息
     *
     * @param updateReqVO 更新信息
     */
    void updateAgentContact(@Valid AgentContactUpdateReqVO updateReqVO);

    /**
     * 删除航线进出口联系人信息
     *
     * @param id 编号
     */
    void deleteAgentContact(Long id);

    /**
     * 获得航线进出口联系人信息
     *
     * @param id 编号
     * @return 航线进出口联系人信息
     */
    AgentContactDO getAgentContact(Long id);

    /**
     * 获得航线进出口联系人信息列表
     *
     * @param ids 编号
     * @return 航线进出口联系人信息列表
     */
    List<AgentContactDO> getAgentContactList(Collection<Long> ids);

    /**
     * 获得航线进出口联系人信息分页
     *
     * @param pageReqVO 分页查询
     * @return 航线进出口联系人信息分页
     */
    PageResult<AgentContactDO> getAgentContactPage(AgentContactPageReqVO pageReqVO);

    /**
     * 获得航线进出口联系人专用信息分页
     *
     * @param pageReqVO 分页查询
     * @return 航线进出口联系人专用信息分页
     */
    PageResult<AgentContactDO> personPage(AgentContactPageReqVO pageReqVO);

    /**
     * 获得进出口费用客户查询备注分页
     *
     * @param pageReqVO 分页查询
     * @return 获得进出口费用客户查询备注分页
     */
    PageResult<AgentContactDO> remarkPage(AgentContactPageReqVO pageReqVO);

    /**
     * 导出代理商联系人信息到Excel文件
     *
     * @param agentContactReqVO 查询条件参数对象
     * @return 符合查询条件的代理商联系人Excel导出数据列表，用于生成Excel文件内容
     * @author lzp
     */
    List<AgentContactExcelRespVO> exportExcel(AgentContactReqVO agentContactReqVO);

    /**
     * 查询进出口信息
     *
     * @param agentContactReqDto
     * @return 代理联系方式
     */
    List<AgentContactBaseDto> agentContact(AgentContactReqDto agentContactReqDto);
}
